OS X 上安装GitLab全程指南

其实想要安装一个

我把 GitLab 服务作为系统内部的一个服务,开机后即可使用,这样,一些私有项目就可以用它来进行管理,而且还可以管理其他的内容,比如一些开发时工具的常用配置项,或者作为个人学习知识的进度控制平台等等,任你发挥。下面将安装过程完整记录下来,希望对你有用。

下面这张图是首次登录 GitLab 后的截图:

安装环境

OS: OS X 10.9.4 (非 server) Ruby: 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] (系统自带) Rails: 4.1.1 Git: 1.8.5.2 (Apple Git-48) Redis: 2.8.3 Mysql: Ver 14.14 Distrib 5.6.19, for osx10.7 (x86_64) using EditLine wrapper GitLab: 7.1.1

安装过程

假定你使用 MAC 系统时已经安装了相关的命令行管理工具,包括 Homebrew,Xcode,如果没有请参考互联网。

git 用户

在使用 gitlab 服务的时候,其实是通过系统的 git 用户的 SSH 连接,向服务端提交代码的,所有的 git 客户端都是通过服务器端的 git 用户,所以我们要先在本地建立一个 git 账号,并且让他加入 git 组,同时还要将其加入到 sudo 用户中去,这样在使用该账号登录使用过程中就可以进行一些 sudo 操作。

首先使用非 git 账户登录系统,在该账号下我们建立 git 用户账号,可以通过【系统偏好设置】->【用户和群组】进行,但是其中不能建立组,所以我们可以通过命令行。

建立用户组 git,并且设定唯一组编号 1050

sudo dscl . -create /Groups/git sudo dscl . -create /Groups/git PrimaryGroupID 1050

然后将 git 用户加入该组

sudo dscl . -create /Users/git PrimaryGroupID 1050

加入一行文本

git 用户建立好后,其主目录在

依赖的软件

将需要的一些软件库都安装好,通过 Homebrew 可以一键搞定,Git 和 Redis 也一起安装,如下:

brew install icu4c git logrotate redis libxml2 cmake

确定本机 python 的版本的是 2.5+,不要使用 3.x

python --version

做一个软链接,让 Gitlab 能够找到 python2 这个命令,这是个狗屁逻辑

sudo ln -s /usr/bin/python /usr/bin/python2

安装 python 的一些库

sudo easy_install pip sudo pip install pygments curl -O <http://heanet.dl.sourceforge.net/project/docutils/docutils/0.11/docutils-0.11.tar.gz> gunzip -c docutils-0.11.tar.gz | tar xopf - cd docutils-0.11 sudo python setup.py install

Mysql

mysql 的安装你可以通过源码或者 brew 进行或者 dmg 文件安装都可以,安装完毕后设为随系统启动,然后设置一下数据库。

mysql -u root -pPASSWORD_HERE CREATE USER 'git'@'localhost' IDENTIFIED BY 'PASSWORD_HERE'; CREATE DATABASE IF NOT EXISTS gitlabhq_production DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON gitlabhq_production.* TO 'git'@'localhost';

下面测试下是否可以连接上 mysql 数据库

mysql -ugit -pPASSWORD_HERE -D gitlabhq_production

Ruby

使用系统自带的 ruby 即可,OS X 默认安装的 ruby 是 2.0.0 版本,已经可以满足条件。

GitLab Shell

是一个支持客户端 SSH 访问 git 仓库的应用,通过它可以执行 git 命令,官网在

cd /Users/git git clone <https://github.com/gitlabhq/gitlab-shell.git> cd gitlab-shell git checkout v1.9.7 cp config.yml.example config.yml

配置 gitlab-shell,替换域名为你的域名,这里统一使用本机地址 localhost(这里的 sed 命令,在 mac 上可能需要使用 gsed,如果你已经安装了的话)

sed -i """s/localhost/domain.com/" config.yml

在替换 linux 系统下的主目录 home 为 max 系统下的 Users,同时要修改 redis-cli 客户端程序的路径

sed -i """s/\\/home\\//\\/Users\\//g" config.yml sed -i """s/\\/usr\\/bin\\/redis-cli/\\/usr\\/local\\/bin\\/redis-cli/" config.yml

开始安装 gitlab-shell

./bin/install

GitLab

主程序,开源,官网地址在

cd /Users/git git clone <https://github.com/gitlabhq/gitlabhq.git> gitlab cd gitlab git checkout 7-1-stable

配置 gitlab

cp config/gitlab.yml.example config/gitlab.yml sed -i """s/\\/usr\\/bin\\/git/\\/usr\\/local\\/bin\\/git/g" config/gitlab.yml sed -i """s/\\/home/\\/Users/g" config/gitlab.yml sed -i """s/localhost/domain.com/g" config/gitlab.yml

设置当前目录下 log/ 和 tmp/ 目录的可读写属性 (sudo 设置终于派上用处了)

sudo chown -R git log/ sudo chown -R git tmp/ sudo chmod -R u+rwX log/ sudo chmod -R u+rwX tmp/

创建仓库目录 repositories, 这个目录就是用来存放你的工程代码的地方,同时确定该目录可以被 gitlab 读写

mkdir /Users/git/repositories sudo chmod -R u+rwX /Users/git/repositories/

创建 gitlab-satellites 目录,也是用于存放工程代码相关的地方

mkdir /Users/git/gitlab-satellites

创建存放进程号和 socket 连接的目录

mkdir tmp/pids/ mkdir tmp/sockets/ sudo chmod -R u+rwX tmp/pids/ sudo chmod -R u+rwX tmp/sockets/

创建公共文件上传目录,可以先检查下,如果已经存在就不用在建立了

mkdir public/uploads sudo chmod -R u+rwX public/uploads

再将仓库目录的归属重新设置一次,放入 git 组中

sudo chown -R git:git /Users/git/repositories/ sudo chmod -R ug+rwX,o-rwx /Users/git/repositories/ sudo chmod -R ug-s /Users/git/repositories/ sudo find /Users/git/repositories/ -type d -print0 | sudo xargs -0 chmod g+s

下面需要对 unicorn 的配置文件进行修改,主要还是修改 home 目录为 max 下的 Users 目录 (unicorn 是 rails 应用的 web 容器,类似于 webrick)

cp config/unicorn.rb.example config/unicorn.rb sudo -u git sed -i """s/\\/home/\\/Users/g" config/unicorn.rb

把下面这行注释掉,在

listen "/Users/git/gitlab/tmp/sockets/gitlab.socket", :backlog => 64

设置 rack_attack 中间件,这个东西是用于保护你的 web 应用,防止一些攻击请求

cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

设置 logrotate 配置文件,用于整理你的 web 应用的 log 日志的

sudo mkdir /etc/logrotate.d/ sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab sudo sed -i """s/\\/home/\\/Users/g" /etc/logrotate.d/gitlab

设置 git 的全局变量,用户名和邮箱设置你自己常用的即可

git config --global user.name "GitLab" git config --global user.email "[email protected]"

设置连接 mysql 数据库的配置

cp config/database.yml.mysql config/database.yml sed -i """s/secure password/PASSWORD_HERE/g" config/database.yml

安装 Gem 包

gitlab 配置好后,如果整个 ruby 没有 gem 包,gitlab 也没有办法跑起来。rails3.0 版本后使用 bundle 进行管理 gem,不在是原来的所有 gem 都安装在系统目录中(/Library/Ruby/Gems/2.0.0/gems),而是通过 bundle,依赖配置文件进行安装,安装后的目录是在工程目录下,不会在污染系统目录,但是首先我们需要使用传统方式来安装 bundler 这个 gem 包。

sudo gem install bundler

你可以用 gem list 查看下是否以及安装好 bundler。不要使用 rvm 来管理你的 ruby 版本,因为在 gitlab 启动时,可能无法识别 rvm 中的那个版本 ruby。另外,需要将 bundle 所依赖的配置文件 Gemfile 和 Gemfile.lock 中的 underscore-rails 版本修改为 1.5.2。下面开始安装。

sudo bundle install --deployment --without development test postgres aws

如果一切 ok,那么恭喜你了,这一步很重要。安装 gem 包过程可能由于网络原因失败,那么可以修改下 Gemfile 文件的第一行 gem 文件的地址为国内的

数据库初始化 (需要先将 redis 服务启动,端口默认 6379,不要修改)

bundle exec rake gitlab:setup RAILS_ENV=production

执行成功后,会提示出现 gitlab 系统登录的默认用户名和密码。

login………root password......5iveL!fe

预编译 assets

bundle exec rake assets:precompile RAILS_ENV=production

启动 gitlab

通过以上漫长的操作后,如果没有倒下的话,说明你成功在望了,下面就可以启动 gitlab 应用了,为了方便,我们将 gitlab 的启动和一些后台服务设置为系统服务项,自动启动。上文中有提过 unicorn 这个 web 服务器的,启动它就可以启动 gitlab 服务了。

sudo curl --output /Library/LaunchDaemons/gitlab.web.plist <https://raw.githubusercontent.com/CiTroNaK/Installation-guide-for-GitLab-on-OS-X/master/gitlab.web.plist> sudo launchctl load /Library/LaunchDaemons/gitlab.web.plist sudo curl --output /Library/LaunchDaemons/gitlab.background_jobs.plist <https://raw.githubusercontent.com/CiTroNaK/Installation-guide-for-GitLab-on-OS-X/master/gitlab.background_jobs.plist> sudo launchctl load /Library/LaunchDaemons/gitlab.background_jobs.plist

以上命令成功执行后,如果没有问题,那么你的 gitlab 应用就已经可以访问了,打开浏览器输入

app error: Missing secret_key_base for 'production’ environment

这是 Rails4.1 的新功能导致的,解决方案如下:

cd /Users/git/gitlab cp vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/generators/rails/app/templates/config/secrets.yml config/

拷贝 secret_token.rb 文件中已经存在的 secret_key 到该文件下,看看这里的建议:

you can simply copy the existing secret_key_base from the secret_token.rb initializer to secrets.yml under the production section, replacing '<%= ENV["SECRET_KEY_BASE"] %>'

然后在该 secrets.yml 文件中,将 development 和 test 模式下的 secret_key_base 置为空即可。再次通过浏览器访问,用 root 用户登录,一切 OK!

最后的检查

你以为你已经安装好了,其实,其实未必,我们使用命令给 gitlab-shell 做个全面的体检

cd /Users/git/gitlab-shell/ ./bin/check

控制台提示如下:

Check GitLab API access: Network is unreachable - connect(2) (Errno::ENETUNREACH)

解决方案是,有三个配置文件的 ip 地址端口要保持一致。

/Users/git/gitlab/config/unicorn.rb:配置 ruby 提供的服务端口,ip //40 行 /Users/git/gitlab/config/gitlab.yml:配置 gitlab 服务的端口,ip //18 行 /Users/git/gitlab-shell/config.yml:配置 gitlab-shell 要调用的 API 接口 //5 行